{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import datetime\n",
    "import math\n",
    "from Orange.data import Domain, DiscreteVariable, ContinuousVariable\n",
    "from orangecontrib.associate.fpgrowth import *\n",
    "import Orange\n",
    "import numpy as np\n",
    "from Orange.data import Domain, Table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cs_mba = pd.read_excel(io=r'Online Retail.xlsx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cs_mba_uk = cs_mba[cs_mba.Country == 'United Kingdom']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>InvoiceNo</th>\n",
       "      <th>StockCode</th>\n",
       "      <th>Description</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>InvoiceDate</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>CustomerID</th>\n",
       "      <th>Country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536365</td>\n",
       "      <td>85123A</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>2010-12-01 08:26:00</td>\n",
       "      <td>2.55</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536365</td>\n",
       "      <td>71053</td>\n",
       "      <td>WHITE METAL LANTERN</td>\n",
       "      <td>6</td>\n",
       "      <td>2010-12-01 08:26:00</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536365</td>\n",
       "      <td>84406B</td>\n",
       "      <td>CREAM CUPID HEARTS COAT HANGER</td>\n",
       "      <td>8</td>\n",
       "      <td>2010-12-01 08:26:00</td>\n",
       "      <td>2.75</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029G</td>\n",
       "      <td>KNITTED UNION FLAG HOT WATER BOTTLE</td>\n",
       "      <td>6</td>\n",
       "      <td>2010-12-01 08:26:00</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029E</td>\n",
       "      <td>RED WOOLLY HOTTIE WHITE HEART.</td>\n",
       "      <td>6</td>\n",
       "      <td>2010-12-01 08:26:00</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  InvoiceNo StockCode                          Description  Quantity  \\\n",
       "0    536365    85123A   WHITE HANGING HEART T-LIGHT HOLDER         6   \n",
       "1    536365     71053                  WHITE METAL LANTERN         6   \n",
       "2    536365    84406B       CREAM CUPID HEARTS COAT HANGER         8   \n",
       "3    536365    84029G  KNITTED UNION FLAG HOT WATER BOTTLE         6   \n",
       "4    536365    84029E       RED WOOLLY HOTTIE WHITE HEART.         6   \n",
       "\n",
       "          InvoiceDate  UnitPrice  CustomerID         Country  \n",
       "0 2010-12-01 08:26:00       2.55     17850.0  United Kingdom  \n",
       "1 2010-12-01 08:26:00       3.39     17850.0  United Kingdom  \n",
       "2 2010-12-01 08:26:00       2.75     17850.0  United Kingdom  \n",
       "3 2010-12-01 08:26:00       3.39     17850.0  United Kingdom  \n",
       "4 2010-12-01 08:26:00       3.39     17850.0  United Kingdom  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cs_mba_uk.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Remove returned item as we are only interested in the buying patterns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cs_mba_uk = cs_mba_uk[~(cs_mba_uk.InvoiceNo.str.contains(\"C\") == True)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cs_mba_uk = cs_mba_uk[~cs_mba_uk.Quantity<0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cs_mba_ger = cs_mba[cs_mba.Country == 'Germany']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9495, 8)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cs_mba_ger.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cs_mba_ger = cs_mba_ger[~(cs_mba_ger.InvoiceNo.str.contains(\"C\") == True)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cs_mba_ger = cs_mba_ger[~cs_mba_ger.Quantity<0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>InvoiceNo</th>\n",
       "      <th>StockCode</th>\n",
       "      <th>Description</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>InvoiceDate</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>CustomerID</th>\n",
       "      <th>Country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1109</th>\n",
       "      <td>536527</td>\n",
       "      <td>22809</td>\n",
       "      <td>SET OF 6 T-LIGHTS SANTA</td>\n",
       "      <td>6</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>2.95</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1110</th>\n",
       "      <td>536527</td>\n",
       "      <td>84347</td>\n",
       "      <td>ROTATING SILVER ANGELS T-LIGHT HLDR</td>\n",
       "      <td>6</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>2.55</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1111</th>\n",
       "      <td>536527</td>\n",
       "      <td>84945</td>\n",
       "      <td>MULTI COLOUR SILVER T-LIGHT HOLDER</td>\n",
       "      <td>12</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>0.85</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1112</th>\n",
       "      <td>536527</td>\n",
       "      <td>22242</td>\n",
       "      <td>5 HOOK HANGER MAGIC TOADSTOOL</td>\n",
       "      <td>12</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>1.65</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1113</th>\n",
       "      <td>536527</td>\n",
       "      <td>22244</td>\n",
       "      <td>3 HOOK HANGER MAGIC GARDEN</td>\n",
       "      <td>12</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>1.95</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     InvoiceNo StockCode                          Description  Quantity  \\\n",
       "1109    536527     22809              SET OF 6 T-LIGHTS SANTA         6   \n",
       "1110    536527     84347  ROTATING SILVER ANGELS T-LIGHT HLDR         6   \n",
       "1111    536527     84945   MULTI COLOUR SILVER T-LIGHT HOLDER        12   \n",
       "1112    536527     22242        5 HOOK HANGER MAGIC TOADSTOOL        12   \n",
       "1113    536527     22244           3 HOOK HANGER MAGIC GARDEN        12   \n",
       "\n",
       "             InvoiceDate  UnitPrice  CustomerID  Country  \n",
       "1109 2010-12-01 13:04:00       2.95     12662.0  Germany  \n",
       "1110 2010-12-01 13:04:00       2.55     12662.0  Germany  \n",
       "1111 2010-12-01 13:04:00       0.85     12662.0  Germany  \n",
       "1112 2010-12-01 13:04:00       1.65     12662.0  Germany  \n",
       "1113 2010-12-01 13:04:00       1.95     12662.0  Germany  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cs_mba_ger.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(457,)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cs_mba_ger.InvoiceNo.value_counts().shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'Country': 'Germany', 'InvoiceNo': 536527, 'InvoiceDate': Timestamp('2010-12-01 13:04:00'), 'CustomerID': 12662.0, 'Description': 'SET OF 6 T-LIGHTS SANTA', 'Quantity': 6, 'StockCode': 22809, 'UnitPrice': 2.95}\n",
      "{'Country': 'Germany', 'InvoiceNo': 536527, 'InvoiceDate': Timestamp('2010-12-01 13:04:00'), 'CustomerID': 12662.0, 'Description': 'ROTATING SILVER ANGELS T-LIGHT HLDR', 'Quantity': 6, 'StockCode': 84347, 'UnitPrice': 2.55}\n",
      "{'Country': 'Germany', 'InvoiceNo': 536527, 'InvoiceDate': Timestamp('2010-12-01 13:04:00'), 'CustomerID': 12662.0, 'Description': 'MULTI COLOUR SILVER T-LIGHT HOLDER', 'Quantity': 12, 'StockCode': 84945, 'UnitPrice': 0.85}\n",
      "{'Country': 'Germany', 'InvoiceNo': 536527, 'InvoiceDate': Timestamp('2010-12-01 13:04:00'), 'CustomerID': 12662.0, 'Description': '5 HOOK HANGER MAGIC TOADSTOOL', 'Quantity': 12, 'StockCode': 22242, 'UnitPrice': 1.65}\n",
      "{'Country': 'Germany', 'InvoiceNo': 536527, 'InvoiceDate': Timestamp('2010-12-01 13:04:00'), 'CustomerID': 12662.0, 'Description': '3 HOOK HANGER MAGIC GARDEN', 'Quantity': 12, 'StockCode': 22244, 'UnitPrice': 1.95}\n"
     ]
    }
   ],
   "source": [
    "\n",
    "for record in cs_mba_ger.head().to_dict('records'):\n",
    "    print(record)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>InvoiceNo</th>\n",
       "      <th>StockCode</th>\n",
       "      <th>Description</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>InvoiceDate</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>CustomerID</th>\n",
       "      <th>Country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1109</th>\n",
       "      <td>536527</td>\n",
       "      <td>22809</td>\n",
       "      <td>SET OF 6 T-LIGHTS SANTA</td>\n",
       "      <td>6</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>2.95</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1110</th>\n",
       "      <td>536527</td>\n",
       "      <td>84347</td>\n",
       "      <td>ROTATING SILVER ANGELS T-LIGHT HLDR</td>\n",
       "      <td>6</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>2.55</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1111</th>\n",
       "      <td>536527</td>\n",
       "      <td>84945</td>\n",
       "      <td>MULTI COLOUR SILVER T-LIGHT HOLDER</td>\n",
       "      <td>12</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>0.85</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1112</th>\n",
       "      <td>536527</td>\n",
       "      <td>22242</td>\n",
       "      <td>5 HOOK HANGER MAGIC TOADSTOOL</td>\n",
       "      <td>12</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>1.65</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1113</th>\n",
       "      <td>536527</td>\n",
       "      <td>22244</td>\n",
       "      <td>3 HOOK HANGER MAGIC GARDEN</td>\n",
       "      <td>12</td>\n",
       "      <td>2010-12-01 13:04:00</td>\n",
       "      <td>1.95</td>\n",
       "      <td>12662.0</td>\n",
       "      <td>Germany</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     InvoiceNo StockCode                          Description  Quantity  \\\n",
       "1109    536527     22809              SET OF 6 T-LIGHTS SANTA         6   \n",
       "1110    536527     84347  ROTATING SILVER ANGELS T-LIGHT HLDR         6   \n",
       "1111    536527     84945   MULTI COLOUR SILVER T-LIGHT HOLDER        12   \n",
       "1112    536527     22242        5 HOOK HANGER MAGIC TOADSTOOL        12   \n",
       "1113    536527     22244           3 HOOK HANGER MAGIC GARDEN        12   \n",
       "\n",
       "             InvoiceDate  UnitPrice  CustomerID  Country  \n",
       "1109 2010-12-01 13:04:00       2.95     12662.0  Germany  \n",
       "1110 2010-12-01 13:04:00       2.55     12662.0  Germany  \n",
       "1111 2010-12-01 13:04:00       0.85     12662.0  Germany  \n",
       "1112 2010-12-01 13:04:00       1.65     12662.0  Germany  \n",
       "1113 2010-12-01 13:04:00       1.95     12662.0  Germany  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cs_mba_ger.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import csv\n",
    "import pandas as pd\n",
    "grocery_items = set()\n",
    "with open(\"grocery_dataset.txt\") as f:\n",
    "    reader = csv.reader(f, delimiter=\",\")\n",
    "    for i, line in enumerate(reader):\n",
    "        grocery_items.update(line)\n",
    "output_list = list()\n",
    "with open(\"grocery_dataset.txt\") as f:\n",
    "    reader = csv.reader(f, delimiter=\",\")\n",
    "    for i, line in enumerate(reader):\n",
    "        row_val = {item:0 for item in grocery_items}\n",
    "        row_val.update({item:1 for item in line})\n",
    "        output_list.append(row_val)\n",
    "grocery_df = pd.DataFrame(output_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Instant food products</th>\n",
       "      <th>UHT-milk</th>\n",
       "      <th>abrasive cleaner</th>\n",
       "      <th>artif. sweetener</th>\n",
       "      <th>baby cosmetics</th>\n",
       "      <th>baby food</th>\n",
       "      <th>bags</th>\n",
       "      <th>baking powder</th>\n",
       "      <th>bathroom cleaner</th>\n",
       "      <th>beef</th>\n",
       "      <th>...</th>\n",
       "      <th>turkey</th>\n",
       "      <th>vinegar</th>\n",
       "      <th>waffles</th>\n",
       "      <th>whipped/sour cream</th>\n",
       "      <th>whisky</th>\n",
       "      <th>white bread</th>\n",
       "      <th>white wine</th>\n",
       "      <th>whole milk</th>\n",
       "      <th>yogurt</th>\n",
       "      <th>zwieback</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 169 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Instant food products  UHT-milk  abrasive cleaner  artif. sweetener  \\\n",
       "0                      0         0                 0                 0   \n",
       "1                      0         0                 0                 0   \n",
       "2                      0         0                 0                 0   \n",
       "3                      0         0                 0                 0   \n",
       "4                      0         0                 0                 0   \n",
       "\n",
       "   baby cosmetics  baby food  bags  baking powder  bathroom cleaner  beef  \\\n",
       "0               0          0     0              0                 0     0   \n",
       "1               0          0     0              0                 0     0   \n",
       "2               0          0     0              0                 0     0   \n",
       "3               0          0     0              0                 0     0   \n",
       "4               0          0     0              0                 0     0   \n",
       "\n",
       "     ...     turkey  vinegar  waffles  whipped/sour cream  whisky  \\\n",
       "0    ...          0        0        0                   0       0   \n",
       "1    ...          0        0        0                   0       0   \n",
       "2    ...          0        0        0                   0       0   \n",
       "3    ...          0        0        0                   0       0   \n",
       "4    ...          0        0        0                   0       0   \n",
       "\n",
       "   white bread  white wine  whole milk  yogurt  zwieback  \n",
       "0            0           0           0       0         0  \n",
       "1            0           0           0       1         0  \n",
       "2            0           0           1       0         0  \n",
       "3            0           0           0       1         0  \n",
       "4            0           0           1       0         0  \n",
       "\n",
       "[5 rows x 169 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grocery_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "43367\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>item_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>whole milk</td>\n",
       "      <td>2513</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>other vegetables</td>\n",
       "      <td>1903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>rolls/buns</td>\n",
       "      <td>1809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>soda</td>\n",
       "      <td>1715</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>yogurt</td>\n",
       "      <td>1372</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          item_name  item_count\n",
       "0        whole milk        2513\n",
       "1  other vegetables        1903\n",
       "2        rolls/buns        1809\n",
       "3              soda        1715\n",
       "4            yogurt        1372"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_item_count = sum(grocery_df.sum())\n",
    "print(total_item_count)\n",
    "item_summary_df = grocery_df.sum().sort_values(ascending = False).reset_index().head(n=20)\n",
    "item_summary_df.rename(columns={item_summary_df.columns[0]:'item_name',item_summary_df.columns[1]:'item_count'}, inplace=True)\n",
    "item_summary_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "item_summary_df['item_perc'] = item_summary_df['item_count']/total_item_count\n",
    "item_summary_df['total_perc'] = item_summary_df.item_perc.cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAD/CAYAAAAXBmohAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGGdJREFUeJzt3XuUXWWZ5/Hvk4SbcjGE6hgT7AANjRBIgFCgyAoMMyQN\nM9zGC7qWgEtMryUtdI/LITSzEF0TJ92DIGKTJi7k0g0CXkBGg81FUBgGQoGBABGJUEhFhBhtUJRI\nimf+2DvxWFTl7KpzUnWS/f2stdfZ5937fc97TlWd337fvc+pyEwkSfU0bqw7IEkaO4aAJNWYISBJ\nNWYISFKNGQKSVGOGgCTVmCEgSTVmCEhSjRkCklRjhoAk1diEse5AM7vttltOnz59rLshSVuUhx9+\n+JeZ2dVsv44PgenTp9PT0zPW3ZCkLUpEPFdlP6eDJKnGDAFJqjFDQJJqrOPPCUja8rz++uv09fXx\n2muvjXVXtnrbb78906ZNY5ttthlRfUNAUtv19fWx0047MX36dCJirLuz1cpM1q5dS19fH3vssceI\n2mg6HRQRu0fE3RHxZEQ8ERHnlOUXRsTqiFheLsc11DkvIlZFxFMRMbeh/JCIWFFu+1L42yFtlV57\n7TUmTZpkAGxmEcGkSZNaGnFVGQmsBz6VmY9ExE7AwxFxR7ntksy8aECn9gNOBfYH3gHcGRH7ZGY/\nsBj4OPAgsBSYB9w24t5L6lgGwOho9XVuOhLIzBcy85Fy/TfASmDqJqqcCNyQmesy81lgFdAdEVOA\nnTPzgSz+sfG1wEkt9V6S1JJhnROIiOnAQRRH8kcAn4yI04AeitHCrykC4oGGan1l2evl+sDyYZm+\n4Lub3N676PjhNilpM2v2dztcVf7O3/Oe93D//ffT29vL/fffz4c//OG29mE0LV++nJ///Occd9xx\nzXcepsqXiEbEjsA3gb/NzFcopnb2BGYBLwBfaFenImJ+RPRERM+aNWva1aykGrn//vsB6O3t5frr\nrx/j3rRm+fLlLF26dLO0XSkEImIbigC4LjO/BZCZL2Zmf2a+AXwF6C53Xw3s3lB9Wlm2ulwfWP4m\nmbkkM2dn5uyurqZffSFJb7LjjjsCsGDBAu69915mzZrFJZdcQn9/P5/+9Kc59NBDOfDAA7niiisA\nuOeee5gzZw4nnngie+65JwsWLOC6666ju7ubAw44gJ/+9KdDPtaLL77IySefzMyZM5k5c+bGALr4\n4ouZMWMGM2bM4Itf/CJQhNKMGTM21r3ooou48MILATjqqKM499xz6e7uZp999uHee+/lD3/4Axdc\ncAE33ngjs2bN4sYbb2zr69R0Oqi8gudKYGVmXtxQPiUzXyjvngw8Xq7fClwfERdTnBjeG1iWmf0R\n8UpEHE4xnXQacFn7nookvdmiRYu46KKL+M53vgPAkiVL2GWXXXjooYdYt24dRxxxBMceeywAjz76\nKCtXrmTXXXdlzz335Mwzz2TZsmVceumlXHbZZRvfyAc6++yzmTNnDjfffDP9/f389re/5eGHH+aq\nq67iwQcfJDM57LDDmDNnDhMnTtxkf9evX8+yZctYunQpn/3sZ7nzzjv53Oc+R09PD1/+8pfb++JQ\n7ZzAEcBHgBURsbws+3vgQxExC0igF/hrgMx8IiJuAp6kuLLorPLKIIBPAFcDO1BcFeSVQZJG1e23\n385jjz3GN77xDQBefvllnn76abbddlsOPfRQpkyZAsBee+21MRwOOOAA7r777iHb/P73v8+1114L\nwPjx49lll1247777OPnkk3nrW98KwCmnnMK9997LCSecsMn+nXLKKQAccsgh9Pb2tvRcq2gaApl5\nHzDYNUhDTlBl5kJg4SDlPcCMN9eQpNGRmVx22WXMnTv3T8rvuecetttuu433x40bt/H+uHHjWL9+\nfVsef8KECbzxxhsb7w+8xn/DY44fP75tj7kpfneQpK3aTjvtxG9+85uN9+fOncvixYt5/fXXAfjJ\nT37Cq6++2tJjHHPMMSxevBiA/v5+Xn75ZY488khuueUWfve73/Hqq69y8803c+SRRzJ58mReeukl\n1q5dy7p16zZOUw3nObSTXxshabMby0u3DzzwQMaPH8/MmTM544wzOOecc+jt7eXggw8mM+nq6uKW\nW25p6TEuvfRS5s+fz5VXXsn48eNZvHgx7373uznjjDPo7i6umTnzzDM56KCDALjgggvo7u5m6tSp\n7Lvvvk3bP/roo1m0aBGzZs3ivPPO44Mf/GBL/W0Uxee2Otfs2bOz8Z/K+DkBqfOtXLmSd73rXWPd\njdoY7PWOiIczc3azuk4HSVKNOR0kSRUtXLiQr3/9639S9v73v5/zzz9/jHrUOkNAkio6//zzt+g3\n/ME4HSRps+j0841bi1ZfZ0NAUtttv/32rF271iDYzDb8U5ntt99+xG04HSSp7aZNm0ZfXx9+AeTm\n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\n2dYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x79c1f59dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "item_summary_df[['item_count']].head(n=20).plot.bar()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAIzCAYAAAD7++atAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd8FNX+//H3hlQTkjVIEkINTRKaGgVyKaJEQlUB5aJ4\npYmoFCEqfrkqXXPhqiAKRK9KURFFBa/lApFqCSgIoqgUjRRpQkxCKCGQ8/uDB/NjJwFSdlPk9Xw8\n5vHInjl79jNDyL535syswxhjBAAAAItXWRcAAABQ3hCQAAAAbAhIAAAANgQkAAAAGwISAACADQEJ\nAADAhoAEAABgQ0ACAACwISABAADYEJAAlCtz586Vw+HQb7/9VtalqH///qpTp45Lm8Ph0Pjx4z3+\n2qtXr5bD4dDq1auttvbt26tJkyYef21J+u233+RwODR37txSeT2gvCEgAeXUuaCwYcMGq+3TTz8t\nlTdnuNeCBQs0ffr0si6jQOW5NqAseZd1AQAK79NPP9XMmTMJSWXoxIkT8vYu2p/OBQsW6IcfftDI\nkSML/Zx27drpxIkT8vX1LWqJRXKh2mrXrq0TJ07Ix8fHo68PlFcEJAAoAn9/f4+Of/LkSfn6+srL\ny8vjr3UxDoejTF8fKGucYgMqiP79+2vmzJmSzr55nVvOycvL0/Tp09W4cWP5+/srPDxcQ4YM0Z9/\n/ukyTp06ddStWzetXr1a119/vQICAtS0aVNrrssHH3ygpk2byt/fX7Gxsdq0adMla8vNzdWECRPU\noEED+fv7q0qVKmrTpo1SUlKsPlu2bFH//v1Vt25d+fv7KyIiQgMHDtSRI0cKtf3/+9//1LZtWwUG\nBqpy5crq2rWrtm7d6tLnwIEDGjBggGrUqCE/Pz9Vq1ZNt912W6HmMy1ZskRNmjSRv7+/mjRposWL\nFxfYzz4H6ejRoxo5cqTq1KkjPz8/hYWF6ZZbbtG3334r6ey8oU8++US7du2y/s3OzWs6N89o4cKF\nevLJJ1W9enVdccUVysrKKnAO0jkbN27U3/72NwUEBCgqKkrJycku6y80j8s+5sVqu9AcpJUrV1r/\nDk6nU7fddpt++uknlz7jx4+Xw+HQzp071b9/fzmdToWEhGjAgAE6fvz4hf8RgHKEI0hABTFkyBDt\n27dPKSkpeuONNwpcP3fuXA0YMEAjRoxQWlqaXnrpJW3atElffvmly6mSnTt36u6779aQIUN0zz33\n6Nlnn1X37t2VnJysf/7zn3rooYckSUlJSerdu7e2bdsmL68Lf54aP368kpKSdN9996lFixbKysrS\nhg0b9O233+qWW26RJKWkpOjXX3/VgAEDFBERoa1bt+qVV17R1q1btW7dOpewZ/fGG2+oX79+SkhI\n0JQpU3T8+HHNnj1bbdq00aZNm6w39V69emnr1q0aPny46tSpo0OHDiklJUW7d+/ON9n6fMuXL1ev\nXr0UExOjpKQkHTlyxApal/LAAw/ovffe07BhwxQTE6MjR47oiy++0E8//aTrrrtOTzzxhDIzM7V3\n715NmzZNkhQUFOQyxqRJk+Tr66tHH31UOTk5Fz2t9ueff6pLly7q3bu37rrrLr377rt68MEH5evr\nq4EDB16y3vMVprbzffbZZ+rcubPq1q2r8ePH68SJE3rxxRfVunVrffvtt/n2ce/evRUVFaWkpCR9\n++23evXVVxUWFqYpU6YUqU6gTBgA5dKcOXOMJPPNN99YbUOHDjUF/bf9/PPPjSTz1ltvubQvXbo0\nX3vt2rWNJPPVV19ZbcuWLTOSTEBAgNm1a5fV/vLLLxtJZtWqVRettXnz5qZr164X7XP8+PF8bW+/\n/baRZNauXWu1ndvutLQ0Y4wxR48eNU6n0wwePNjluQcOHDAhISFW+59//mkkmX//+98XraMg11xz\njalWrZrJyMiw2pYvX24kmdq1a7v0lWTGjRtnPQ4JCTFDhw696Phdu3bNN44xxqxatcpIMnXr1s23\nf86tO3/f33jjjUaSee6556y2nJwcc80115iwsDBz6tQpY0z+fXixMS9UW1pampFk5syZY7Wde50j\nR45Ybd99953x8vIy9957r9U2btw4I8kMHDjQZcwePXqYKlWq5HstoDziFBvwF7Bo0SKFhITolltu\n0eHDh60lNjZWQUFBWrVqlUv/mJgYxcXFWY9btmwpSbr55ptVq1atfO2//vrrRV/f6XRq69at2rFj\nxwX7BAQEWD+fPHlShw8fVqtWrSTJOh1VkJSUFGVkZOiuu+5y2bZKlSqpZcuW1rYFBATI19dXq1ev\nznda8WL279+vzZs3q1+/fgoJCbHab7nlFsXExFzy+U6nU+vXr9e+ffsK/Zp2/fr1c9k/F+Pt7a0h\nQ4ZYj319fTVkyBAdOnRIGzduLHYNl3JuP/Xv31+hoaFWe7NmzXTLLbfo008/zfecBx54wOVx27Zt\ndeTIEWVlZXmsTsBdCEjAX8COHTuUmZmpsLAwVa1a1WXJzs7WoUOHXPqfH4IkWcGgZs2aBbZfKnBM\nnDhRGRkZatiwoZo2barHHntMW7ZscemTnp6uhx9+WOHh4QoICFDVqlUVFRUlScrMzLzotklnw5t9\n25YvX25tm5+fn6ZMmaL//e9/Cg8PV7t27TR16lQdOHDgorXv2rVLktSgQYN8666++uqLPleSpk6d\nqh9++EE1a9ZUixYtNH78+EsGSrtz+6EwIiMjFRgY6NLWsGFDSfLovaPO7aeC9kl0dLQOHz6sY8eO\nubTbf8+uvPJKSZf+fQLKA+YgAX8BeXl5CgsL01tvvVXg+qpVq7o8rlSpUoH9LtRujLno67dr106/\n/PKLPvzwQy1fvlyvvvqqpk2bpuTkZN13332Szs5H+eqrr/TYY4/pmmuuUVBQkPLy8tSpUyfl5eVd\ndNuks/OQIiIi8q0//5L7kSNHqnv37lqyZImWLVump556SklJSVq5cqWuvfbai25DcfXu3Vtt27bV\n4sWLtXz5cv373//WlClT9MEHH6hz586FGqOwR48K60Lzuc6cOePW17mU4v4+AeUBAQmoQC70xlev\nXj199tlnat26tdvfbAsrNDRUAwYM0IABA5Sdna127dpp/Pjxuu+++/Tnn39qxYoVmjBhgsaOHWs9\n52Kn5M6pV6+eJCksLEzx8fGF6v/II4/okUce0Y4dO3TNNdfoueee05tvvllg/9q1a1+wlm3btl3y\n9SSpWrVqeuihh/TQQw/p0KFDuu666/T0009bAeliE9CLat++fTp27JjLUaTt27dLkjVJ+tyRmoyM\nDJfnnjsKdL7C1nZuPxW0T37++WddddVV+Y5sARUZp9iACuTcG5D9ja937946c+aMJk2alO85p0+f\nztff3eyX6gcFBal+/frKycmR9P+PJNiPHBTmDs4JCQkKDg7WM888o9zc3Hzr//jjD0nS8ePHdfLk\nSZd19erVU+XKla06ClKtWjVdc801mjdvnsupvpSUFP34448Xre3MmTP5Tg+GhYUpMjLS5TUDAwMv\nehqxKE6fPq2XX37Zenzq1Cm9/PLLqlq1qmJjYyX9/1C5du1al1pfeeWVfOMVtrbz99P5v08//PCD\nli9fri5duhR7m4DyiCNIQAVy7g1wxIgRSkhIUKVKldSnTx/deOONGjJkiJKSkrR582Z17NhRPj4+\n2rFjhxYtWqQXXnhBd9xxh8fqiomJUfv27RUbG6vQ0FBt2LDBuvRdkoKDg605Qbm5uapevbqWL1+u\ntLS0S44dHBys2bNn6x//+Ieuu+469enTR1WrVtXu3bv1ySefqHXr1nrppZe0fft2dejQQb1791ZM\nTIy8vb21ePFiHTx4UH369LnoayQlJalr165q06aNBg4cqPT0dL344otq3LixsrOzL/i8o0ePqkaN\nGrrjjjvUvHlzBQUF6bPPPtM333yj5557zuoXGxurd955R4mJibrhhhsUFBSk7t27F3LvuoqMjNSU\nKVP022+/qWHDhnrnnXe0efNmvfLKK9atHBo3bqxWrVppzJgxSk9PV2hoqBYuXKjTp0/nG68otf37\n3/9W586dFRcXp0GDBlmX+YeEhHB3d/z1lPFVdAAuoKDL/E+fPm2GDx9uqlatahwOR75L/l955RUT\nGxtrAgICTOXKlU3Tpk3N6NGjzb59+6w+tWvXLvCSfEn5Llc/d6n3pS6dnzx5smnRooVxOp0mICDA\nNGrUyDz99NPWZefGGLN3717To0cP43Q6TUhIiLnzzjvNvn378l02f7FL1BMSEkxISIjx9/c39erV\nM/379zcbNmwwxhhz+PBhM3ToUNOoUSMTGBhoQkJCTMuWLc2777570drPef/99010dLTx8/MzMTEx\n5oMPPjD9+vW76GX+OTk55rHHHjPNmzc3lStXNoGBgaZ58+Zm1qxZLs/Jzs42d999t3E6nS63Djh3\n2f2iRYvy1XOhy/wbN25sNmzYYOLi4oy/v7+pXbu2eemll/I9/5dffjHx8fHGz8/PhIeHm3/+858m\nJSUl35gXqq2gy/yNMeazzz4zrVu3NgEBASY4ONh0797d/Pjjjy59zl3m/8cff7i0X+jfFiiPHMYw\nWw4AAOB8zEECAACwISABAADYEJAAAABsCEgAAAA2BCQAAAAb7oNUSHl5edq3b58qV67s1rviAgAA\nzzHG6OjRo4qMjJSXV+GPCxGQCmnfvn35vsgTAABUDHv27FGNGjUK3Z+AVEiVK1eWdHYHBwcHl3E1\nAACgMLKyslSzZk3rfbywCEiFdO60WnBwMAEJAIAKpqjTY5ikDQAAYENAAgAAsCEgAQAA2BCQAAAA\nbAhIAAAANgQkAAAAGwISAACADQEJAADAhoAEAABgQ0ACAACwISABAADYEJAAAABsCEgAAAA2ZRqQ\nkpKSdMMNN6hy5coKCwvT7bffrm3btrn06d+/vxwOh8vSqVMnlz4nT57U0KFDVaVKFQUFBalXr146\nePCgS5/09HT17dtXwcHBcjqdGjRokLKzsz2+jQAAoOIp04C0Zs0aDR06VOvWrVNKSopyc3PVsWNH\nHTt2zKVfp06dtH//fmt5++23XdaPGjVKH330kRYtWqQ1a9Zo37596tmzp0ufvn37auvWrUpJSdHH\nH3+stWvX6v777/f4NgIAgIrHYYwxZV3EOX/88YfCwsK0Zs0atWvXTtLZI0gZGRlasmRJgc/JzMxU\n1apVtWDBAt1xxx2SpJ9//lnR0dFKTU1Vq1at9NNPPykmJkbffPONrr/+eknS0qVL1aVLF+3du1eR\nkZGXrC0rK0shISHKzMxUcHCwm7b4rGkp29021qhbGrptLAAAKrrivn+XqzlImZmZkqTQ0FCX9tWr\nVyssLExXX321HnzwQR05csRat3HjRuXm5io+Pt5qa9SokWrVqqXU1FRJUmpqqpxOpxWOJCk+Pl5e\nXl5av359gbXk5OQoKyvLZQEAAJeHchOQ8vLyNHLkSLVu3VpNmjSx2jt16qT58+drxYoVmjJlitas\nWaPOnTvrzJkzkqQDBw7I19dXTqfTZbzw8HAdOHDA6hMWFuay3tvbW6GhoVYfu6SkJIWEhFhLzZo1\n3bm5AACgHPMu6wLOGTp0qH744Qd98cUXLu19+vSxfm7atKmaNWumevXqafXq1erQoYPH6hkzZowS\nExOtx1lZWYQkAAAuE+XiCNKwYcP08ccfa9WqVapRo8ZF+9atW1dXXXWVdu7cKUmKiIjQqVOnlJGR\n4dLv4MGDioiIsPocOnTIZf3p06eVnp5u9bHz8/NTcHCwywIAAC4PZRqQjDEaNmyYFi9erJUrVyoq\nKuqSz9m7d6+OHDmiatWqSZJiY2Pl4+OjFStWWH22bdum3bt3Ky4uTpIUFxenjIwMbdy40eqzcuVK\n5eXlqWXLlm7eKgAAUNGV6Sm2oUOHasGCBfrwww9VuXJlaz5QSEiIAgIClJ2drQkTJqhXr16KiIjQ\nL7/8otGjR6t+/fpKSEiw+g4aNEiJiYkKDQ1VcHCwhg8frri4OLVq1UqSFB0drU6dOmnw4MFKTk5W\nbm6uhg0bpj59+hTqCjYAAHB5KdOANHv2bElS+/btXdrnzJmj/v37q1KlStqyZYvmzZunjIwMRUZG\n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\nKZd13377bbHHNcYU+AXER44cUWBgYLHHPX36tF5//XV99tlnio2NzTfW888/X+yxf/jhB7Vo0UKS\n9O6776pJkyb68ssvtXz5cj3wwAMaO3Zssce+0P747rvvFBoaWuxxJSktLU0xMTGSpPfff1/dunXT\nM888o2+//VZdunQp0dizZ8/W2LFjNXLkSD399NM6c+aMpLPfoTh9+nTddtttxR573LhxGjhwoGrX\nrl2iGu08ua8bNGigiRMn6ssvvyzw92/EiBElGn/p0qUKCgpSmzZtJJ09Gvif//xHMTExmjlzpq68\n8soij/mvf/1Ljz32mGbPnq0mTZqUqD47T+7rhx9+WNdff72+++47ValSxWrv0aOHBg8eXKKx77nn\nHhlj9Prrrys8PLxEX5Y+ffp06+cjR45o8uTJSkhIsL5yKzU1VcuWLdNTTz1Vopo9+fepVJVlOsOF\n5eTkmPj4ePO3v/3NBAUFWUd9Ssrf39/s3r3bGGPMP/7xD+sIx65du0xgYKBbXsMTnx5eeOEFExQU\nZIYNG2Z8fX3NkCFDTHx8vAkJCTH//Oc/izVmjx49TI8ePYyXl5fp0qWL9bhHjx7m1ltvNXXq1DEJ\nCQnFGtsYY9q3b3/B5aabbir2uMYYExgYaNLS0owxxnTv3t3861//Msac/Xf09/cv1pjnPl16eXnl\n+6QZHBxsvLy8zEMPPVSiuq+88kqzdetWY4wxrVu3Ni+//LIxxpi0tDQTEBBQorGjo6PN4sWLjTHG\nBAUFWZ/iv//+e1OlSpUSjd28eXNTqVIlc/PNN5u33nrLnDx5skTjlca+rlOnzgWXqKioEo1tjGeO\nBjqdTuPr62u8vLyMv7+/W45qlMa+Dg0NNT///LMxxvV3zx2/14GBgdbY7tSzZ88C31defPFFc9tt\nt5VobE/8fSoLHEEqJwqarzJ+/Hjddddduueee9SuXTurT7NmzYr9OjVr1lRqaqpCQ0O1dOlSLVy4\nUJL0559/yt/fv9jjns8Tnx5mzZqlV155RXfddZfmzp2r0aNHq27duho7dmyB87UK49y3OxtjVLly\nZQUEBFjrfH191apVqxJ9+lu1alWxn3spjRs3VnJysrp27aqUlBRNmjRJ0tk5D+d/gi2K6dOnyxij\ngQMHasKECS7ffu3r66s6deqU+Mud27Rpo8TERLVu3Vpff/213nnnHUnS9u3brSOOxZWWlqZrr702\nX7ufn5+OHTtWorE3b96sTZs2ac6cOXr44Yc1dOhQ9enTRwMHDtQNN9xQ5PFKY197eoK2J44Gnn+E\nw11KY1/n5eVZRyzPt3fvXlWuXLlEY99www3as2eP278Wa9myZZoyZUq+9k6dOun//u//SjS2J/4+\nlYmyzWc459z5ZIfDYS3nPy7uOWe7mTNnGm9vb+N0Ok2zZs3MmTNnjDHGzJgxw7Rv394dm+KRTw8B\nAQHWnJKqVauazZs3G2OM2b59uwkNDS12rXl5eaZ///7m6NGjxR7jUnbs2GGWLl1qjh8/br1mSa1a\ntco4nU7j5eVlBgwYYLWPGTPG9OjRo0Rjr1692pw6daqkJRZo165dpmvXrqZZs2bm1VdftdpHjhxp\nhg8fXqKxo6OjrblG53+KnzFjhrn22mtLNPb5Tp06Zd5//33TrVs34+PjY5o2bWqmT59uMjIyijyW\nJ/f1OTk5Oebnn382ubm5bh3Xk0cDPcGT+7p3795m8ODBxpizv3u//vqrOXr0qLn55ptLPLdu586d\nJj4+3sydO9ds2LDBfPfddy5LcdWqVcs8++yz+dqfffZZU6tWrZKU7NG/T6WJgFRO/Pbbb4VeSuqb\nb74xH3zwgUso+Pjjj80XX3xR4rGNMaZFixbm8ccfN2vXrjX+/v5WmElNTTXVq1cv1phRUVHm22+/\nNcYYExsba5KTk40xxixbtqxEEwrPnDljfHx8zPbt24s9xoUcPnzY3HzzzVawPfeGPWDAAJOYmFji\n8U+fPm3S09Nd2tLS0gqciHopmZmZLj9fbCmv/vOf/5jq1aubhQsXmsDAQPP222+byZMnWz+7S05O\njlm4cKHp2LGj8fb2Nu3atTP169c3lStXNgsXLrzk80trXx87dswMHDjQVKpUyWXi8LBhw0xSUlKJ\nxjbGmG7dupmEhAQzceJE4+PjY/bu3WuMOft/skGDBsUed+fOneaJJ54wffr0sX6XP/30U/PDDz8U\neazS2td79uwxMTExJjo62nh7e5tWrVqZKlWqmKuvvrpY/x/Pl5qaaqKiogr88FySD8xz5swxlSpV\nMt26dTOTJk0ykyZNMt26dTPe3t5mzpw5JarZGPf+fSorBKTLlKc+VRrjmU8PgwYNMuPHjzfGGPPS\nSy+ZgIAAEx8fb5xOpxk4cGCJ6vXUlTP/+Mc/TEJCgtmzZ4/LEY2lS5eamJiYEo+fm5trUlJSTHJy\nsnXF4++//16so2HnX+Fz7g+vfXHHEcwLvTllZWWZnJycEo1tjDFvvvmmqV+/vvVGUr16dZcjVSWx\nYcMGM3ToUBMaGmqqVatmHn/8cbNjxw5r/YwZM0xYWNglxymtfT1ixAgTGxtrPv/8cxMYGGj9/i1Z\nssRcc801JRrbmLNHA7t16+bWo4GrV6+2/m/7+vpaNSclJZlevXoVebzS2tfGnP3/+Oabb5rHHnvM\nPPjgg+Y///mPddS4JKKjo03Pnj3NunXrTFpamls/MK9bt87cfffd5tprrzXXXnutufvuu826detK\nXPNfhcMYY8r6NB+k//73v4Xue+uttxb7dY4fP67hw4dr3rx5ks7O/ahbt66GDx+u6tWrl/jc8zln\nzpxRVlaWy5Usv/32m6644gqFhYUVeby8vDzl5eXJ2/vstLmFCxfqq6++UoMGDTRkyBD5+voWu9aP\nPvpIU6dOdfuVMxEREVq2bJmaN2+uypUr67vvvlPdunX166+/qlmzZiW6P8quXbvUqVMn7d69Wzk5\nOda/48MPP6ycnBwlJycXabw1a9aodevW8vb21po1ay7a98Ybbyx23V5eXhe9CqdGjRrq37+/xo0b\nJy+v4t+m7fjx48rOzi7W71pBmjZtqp9//lkdO3bU4MGD1b17d1WqVMmlz+HDhxUWFqa8vLyLjlVa\n+7p27dp655131KpVK5ffv507d+q6664r0T10Tp8+rQULFqhjx46KiIgo9jh2cXFxuvPOO5WYmOhS\n89dff62ePXte9Ca6BSmtfe1JgYGB+u6771S/fv2yLqXQrr322gL/nzscDvn7+6t+/frq37+/brrp\npjKorgjKOqHhrPMPn15sKe+fKisiT1w5Y8zZuQjnTt2dfwTpm2++KdG8KWOMue2228w999xjcnJy\nXMZetWqVqV+/fonG9qT58+ebGjVqmCeffNL897//Nf/973/Nk08+aWrWrGmSk5PN5MmTjdPpNE8/\n/XRZl+pi4sSJ1imkiiIgIMD6vTj/d2Tz5s0mODjYLeO745T/+QIDA82vv/5qjMl/NZifn59bX8ud\nnnnmGfP666/na3/ttdesOZjF1a1bN4/fo+7EiRNuPeU4ZswYExISYtq0aWMSExNNYmKiadu2rQkJ\nCTEPP/ywueWWW4yXl1e5vT/ZOVzFVk5c6lOnuyxZssT6VHl+wm/cuLF++eUXt7zGwYMH9eijj2rF\nihU6dOiQjO0gZUFXexSkKHeiLsmVfZ64ckaS2rZtq/nz51tXcDgcDuXl5Wnq1Kkl/uT0+eef66uv\nvsp35KxOnTr6/fffSzT2pe4e3q5du2KP/cYbb+i5555T7969rbbu3buradOmevnll7VixQrVqlVL\nTz/9tP75z38WaWxPfWrNzc3V3Llzdccdd6h69epFeu6leHJfX3/99frkk080fPhwSbL2zauvvlri\nq7YkqUWLFtq0aZNb7w3ldDq1f/9+RUVFubRv2rSpxPvek/v65Zdftq7IPF/jxo3Vp08fPf7448Ue\nu3v37ho1apS+//57NW3aVD4+Pi7ri3tG4fjx4xo9erTeffddHTlyJN/6wv6dLkh6eroeeeSRfPdT\nmjx5snbt2qXly5dr3LhxmjRpUonuT+ZxZZ3QULo8/anSGGM6depkYmJizKxZs8zixYvNkiVLXJbC\nsk9GvNhSHn3//fcmLCzMdOrUyfj6+po77rjDREdHm/DwcLNz584Sje10Oq0riM7/d/z8888LNQ/m\nYi505NId+zogIKDACfHbt2+3rnz69ddfi3UVlCc/tUZGRpoff/yxyM+7FE/u688//9wEBQWZBx54\nwPj7+1v7IDAw0GzYsKHEtb/zzjumbt265sUXXzRfffWVW66ueuSRR0ybNm3M/v37TeXKlc2OHTvM\nF198YerWrWvNQSwuT+5rPz8/68jX+X755ZcSH/ny1BmFhx56yERHR5v33nvPBAQEmNdff91MmjTJ\n1KhRw7z55pslqjkkJMRlft45O3bssN5nfvrpJxMUFFSi1/E0AlI58cILL5gTJ05YP19sKYm2bdua\nGTNmGGP+/+Woxpy9sqUkN0U8X1BQkNm0aVOJxzl/IuLixYtNvXr1THJysvUHODk52TRo0MC6OWBx\n7dq166JLSWRkZJjJkyebO++803Tu3Nk88cQTZt++fSUa0xjPXlackZHhsvzxxx9m+fLlpmXLluaz\nzz4r0dgNGjQo8OtXHn/8cdOwYUNjzNlTkJGRkUUee8iQIWbixIn52idNmmTuu+8+Y4wxY8eONbGx\nsUUe++mnnzb9+vVz+0UNntzXxpy9Iuy+++4zN9xwg4mOjjZ9+/Y1W7ZscUPlFw4cJXnjzsnJMffd\nd5/x9vY2DofD+Pj4GC8vL3PPPfeY06dPl6heT+7r+vXrmzfeeCNf+/z5891yU05PqFmzplm1apUx\n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\nz7mhe3t7Iz8/v9Zu6HWRsPHx40e0adMGp06dQtu2bcWqnZSUhISEBLRp00YseleuXKnx5++aet3g\nk1IjCgoKnzWlU1BQ4KRdUVFB/v7+pKyszMTFKCoq1uheWxsmTpz4zY//Cj169KC+ffvS48ePmbbH\njx+To6Mj9ezZk7N+dHQ09enThxo3bkxKSkpka2srFjNONTU1pj5YdW7dukUqKiqctPX09Jh6Y+Im\nPj6eLl++TERERUVF1K9fP1JVVaWOHTs2yDqAHz58oN69e0vMhNTGxobCwsKISDhOzdfXl7p37y6R\nPrnWGqxem676mM+fP0/NmjXjpC0pN3RJ07RpU7p3757YdTt16lSj07o4qIuan3WBdILUAGnWrBkd\nPHhQpP3AgQPUvHlzsfTx/v17unv3LsXFxdGbN2/EoilFGEn70EiK//3vfzRixAgqLy9n2srLy+mn\nn37iHGSvpaXFulzO1/jUwT03N5dWr17N+Dg1RKp7TombY8eOkbq6OgUEBBCfz6dVq1bRlClTSF5e\nns6fP89ZPyAgQKio6fDhw4nH41HTpk0ZV+na4ubmRkOHDqUPHz4wfkIPHjwga2tr8vLy4jReSbuh\np6enk4eHB/Xu3Zt69+5NHh4eNZYIqS3Lli0jV1dX+vjxI2et6ly6dIm6du1KV65coWfPngmVn6ru\nAccGGRkZKioqEml/+vQpycrKctKuS6Rp/g0QPz8/BAUFwcfHh3Ecjo2NxZ9//ok5c+Zw2gqTUreQ\nBH1oJMW9e/fQs2dPaGhooEePHgAqvbOKi4tx+fJlTttVCxYsgIqKikTOYUdHRyEH9zZt2kBOTq5B\nO7h7e3tDQUHhmwu71parV6/Cz89PKPV88eLFcHR05KxtbGyMPXv2oFu3brhw4QJGjhyJAwcO4ODB\ng8jPz8f58+drrfn69WsMHz6csZpo2rQpHj9+jK5du+LMmTNQVlZmPV5PT0/IycmJBAjPnTsXb9++\nxfr161lrHz58GKNHj0anTp2EiuzGx8dj//79+Omnn1hrDxs2DJcuXYKKigratWsncgzYhixUxet9\nei0ilkHaAFBcXAwigqamJjIzMxmvMwAQCAQ4efIkfHx88OjRI1ZjrmukE6QGCBEhODgYgYGBzInU\ntGlTzJs3D7NmzeL05Tps2LAa/756NXUXF5dalwqwtrb+5nHdvn27Vtr/BsTtQ6OpqfnV93HixIki\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x79c1e2a7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt; plt.rcdefaults()\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "objects = (list(item_summary_df['item_name'].head(n=20)))\n",
    "y_pos = np.arange(len(objects))\n",
    "performance = list(item_summary_df['item_count'].head(n=20))\n",
    " \n",
    "plt.bar(y_pos, performance, align='center', alpha=0.5)\n",
    "plt.xticks(y_pos, objects, rotation='vertical')\n",
    "plt.ylabel('Item count')\n",
    "plt.title('Item sales distribution')\n",
    " \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#input_df = grocery_df\n",
    "def prune_dataset(input_df, length_trans = 2, total_sales_perc = 0.5, start_item = None, end_item = None):\n",
    "    if 'total_items' in input_df.columns:\n",
    "        del(input_df['total_items'])\n",
    "    item_count = input_df.sum().sort_values(ascending = False).reset_index()\n",
    "    total_items = sum(input_df.sum().sort_values(ascending = False))\n",
    "    item_count.rename(columns={item_count.columns[0]:'item_name',item_count.columns[1]:'item_count'}, inplace=True)\n",
    "    if not start_item and not end_item: \n",
    "        item_count['item_perc'] = item_count['item_count']/total_items\n",
    "        item_count['total_perc'] = item_count.item_perc.cumsum()\n",
    "        selected_items = list(item_count[item_count.total_perc < total_sales_perc].item_name)\n",
    "        input_df['total_items'] = input_df[selected_items].sum(axis = 1)\n",
    "        input_df = input_df[input_df.total_items >= length_trans]\n",
    "        del(input_df['total_items'])\n",
    "        return input_df[selected_items], item_count[item_count.total_perc < total_sales_perc]\n",
    "    elif end_item > start_item:\n",
    "        selected_items = list(item_count[start_item:end_item].item_name)\n",
    "        input_df['total_items'] = input_df[selected_items].sum(axis = 1)\n",
    "        input_df = input_df[input_df.total_items >= length_trans]\n",
    "        del(input_df['total_items'])\n",
    "        return input_df[selected_items],item_count[start_item:end_item]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 427,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(4585, 13)\n"
     ]
    }
   ],
   "source": [
    "output_df, item_counts = prune_dataset(input_df=grocery_df, length_trans=2,total_sales_perc=0.4)\n",
    "print(output_df.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 460,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1607, 7)\n"
     ]
    }
   ],
   "source": [
    "output_df_n, item_counts_n = prune_dataset(grocery_df, length_trans = 2,start_item = 5, end_item = 12)\n",
    "print(output_df_n.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 461,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "input_ass_rules = output_df_n\n",
    "from Orange.data import Domain, DiscreteVariable, ContinuousVariable\n",
    "domain_grocery = Domain([DiscreteVariable.make(name=item,values=['0', '1']) for item in input_ass_rules.columns])\n",
    "data_gro_1 = Orange.data.Table.from_numpy(domain=domain_grocery,  X=input_ass_rules.as_matrix(),Y= None)\n",
    "data_gro_1_en, mapping = OneHot.encode(data_gro_1, include_class=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 462,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "num of required transactions =  16\n"
     ]
    }
   ],
   "source": [
    "support = 0.01\n",
    "print(\"num of required transactions = \", int(input_ass_rules.shape[0]*support))\n",
    "num_trans = input_df.shape[0]*support\n",
    "itemsets = dict(frequent_itemsets(data_gro_1_en, support))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 463,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1447"
      ]
     },
     "execution_count": 463,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(itemsets)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 466,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Raw rules data frame of 41 rules generated\n"
     ]
    }
   ],
   "source": [
    "confidence = 0.3\n",
    "rules_df = pd.DataFrame()\n",
    "if len(itemsets) < 1000000: \n",
    "    rules = [(P, Q, supp, conf)\n",
    "    for P, Q, supp, conf in association_rules(itemsets, confidence)\n",
    "       if len(Q) == 1 ]\n",
    "\n",
    "    names = {item: '{}={}'.format(var.name, val)\n",
    "        for item, var, val in OneHot.decode(mapping, data_gro_1, mapping)}\n",
    "    \n",
    "    eligible_ante = [v for k,v in names.items() if v.endswith(\"1\")]\n",
    "    \n",
    "    N = input_df.shape[0]*0.5\n",
    "    \n",
    "    rule_stats = list(rules_stats(rules, itemsets, N))\n",
    "    \n",
    "    rule_list_df = []\n",
    "    for ex_rule_frm_rule_stat in rule_stats:\n",
    "        ante = ex_rule_frm_rule_stat[0]            \n",
    "        cons = ex_rule_frm_rule_stat[1]\n",
    "        named_cons = names[next(iter(cons))]\n",
    "        if named_cons in eligible_ante:\n",
    "            rule_lhs = [names[i][:-2] for i in ante if names[i] in eligible_ante]\n",
    "            ante_rule = ', '.join(rule_lhs)\n",
    "            if ante_rule and len(rule_lhs)>1 :\n",
    "                rule_dict = {'support' : ex_rule_frm_rule_stat[2],\n",
    "                     'confidence' : ex_rule_frm_rule_stat[3],\n",
    "                    'coverage' : ex_rule_frm_rule_stat[4],\n",
    "                     'strength' : ex_rule_frm_rule_stat[5],\n",
    "                     'lift' : ex_rule_frm_rule_stat[6],\n",
    "                    'leverage' : ex_rule_frm_rule_stat[7],\n",
    "                    'antecedent': ante_rule,\n",
    "                    'consequent':named_cons[:-2] }\n",
    "                rule_list_df.append(rule_dict)\n",
    "    rules_df = pd.DataFrame(rule_list_df)\n",
    "    print(\"Raw rules data frame of {} rules generated\".format(rules_df.shape[0]))\n",
    "    if not rules_df.empty:\n",
    "        pruned_rules_df = rules_df.groupby(['antecedent','consequent']).max().reset_index()\n",
    "    else:\n",
    "        print(\"Unable to generate any rule\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 467,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>antecedent</th>\n",
       "      <th>consequent</th>\n",
       "      <th>support</th>\n",
       "      <th>confidence</th>\n",
       "      <th>lift</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>root vegetables, citrus fruit</td>\n",
       "      <td>tropical fruit</td>\n",
       "      <td>56</td>\n",
       "      <td>0.350427</td>\n",
       "      <td>2.709476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>citrus fruit, tropical fruit</td>\n",
       "      <td>root vegetables</td>\n",
       "      <td>53</td>\n",
       "      <td>0.317568</td>\n",
       "      <td>2.564267</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>bottled water, root vegetables</td>\n",
       "      <td>tropical fruit</td>\n",
       "      <td>44</td>\n",
       "      <td>0.336283</td>\n",
       "      <td>2.600114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>bottled water, citrus fruit</td>\n",
       "      <td>tropical fruit</td>\n",
       "      <td>41</td>\n",
       "      <td>0.318584</td>\n",
       "      <td>2.463266</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>bottled water, tropical fruit</td>\n",
       "      <td>root vegetables</td>\n",
       "      <td>38</td>\n",
       "      <td>0.304000</td>\n",
       "      <td>2.454713</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>sausage, tropical fruit</td>\n",
       "      <td>root vegetables</td>\n",
       "      <td>29</td>\n",
       "      <td>0.311828</td>\n",
       "      <td>2.517921</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>bottled water, citrus fruit</td>\n",
       "      <td>root vegetables</td>\n",
       "      <td>29</td>\n",
       "      <td>0.302083</td>\n",
       "      <td>2.439236</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>sausage, citrus fruit</td>\n",
       "      <td>root vegetables</td>\n",
       "      <td>24</td>\n",
       "      <td>0.320000</td>\n",
       "      <td>2.583908</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>bottled water, sausage</td>\n",
       "      <td>shopping bags</td>\n",
       "      <td>19</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>2.960042</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       antecedent       consequent  support  confidence  \\\n",
       "6   root vegetables, citrus fruit   tropical fruit       56    0.350427   \n",
       "5    citrus fruit, tropical fruit  root vegetables       53    0.317568   \n",
       "2  bottled water, root vegetables   tropical fruit       44    0.336283   \n",
       "1     bottled water, citrus fruit   tropical fruit       41    0.318584   \n",
       "4   bottled water, tropical fruit  root vegetables       38    0.304000   \n",
       "8         sausage, tropical fruit  root vegetables       29    0.311828   \n",
       "0     bottled water, citrus fruit  root vegetables       29    0.302083   \n",
       "7           sausage, citrus fruit  root vegetables       24    0.320000   \n",
       "3          bottled water, sausage    shopping bags       19    0.314815   \n",
       "\n",
       "       lift  \n",
       "6  2.709476  \n",
       "5  2.564267  \n",
       "2  2.600114  \n",
       "1  2.463266  \n",
       "4  2.454713  \n",
       "8  2.517921  \n",
       "0  2.439236  \n",
       "7  2.583908  \n",
       "3  2.960042  "
      ]
     },
     "execution_count": 467,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pruned_rules_df[['antecedent','consequent','support','confidence','lift']].sort_values(['support','confidence'], ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 273,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "visited_rules = set()\n",
    "for ante, cons, supp, conf in rules:\n",
    "    if names[next(iter(cons))] == eligible_ante[0]:\n",
    "        rule_lhs = [names[i][:-2] for i in ante if names[i] in eligible_ante]\n",
    "        ante_rule = ', '.join(rule_lhs)\n",
    "        if ante_rule and len(rule_lhs)>1 and ante_rule not in visited_rules:\n",
    "            print(ante_rule, '-->',\n",
    "              names[next(iter(cons))][:-2],\n",
    "              '(supp: {}, conf: {})'.format(supp, conf))\n",
    "        # By sales percentage\n",
    "\n",
    "total_sales_perc = 0.5\n",
    "item_count = grocery_df.sum().sort_values(ascending = False).reset_index()\n",
    "total_items = sum(grocery_df.sum().sort_values(ascending = False))\n",
    "item_count.rename(columns={item_count.columns[0]:'item_name',item_count.columns[1]:'item_count'}, inplace=True)\n",
    "item_count['item_perc'] = item_count['item_count']/total_items\n",
    "item_count['total_perc'] = item_count.item_perc.cumsum()\n",
    "selected_items = list(item_count[item_count.total_perc < total_sales_perc].item_name)\n",
    "print(len(selected_items))\n",
    "selected_items\n",
    "        visited_rules.add(ante_rule)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>item_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>2166</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>1938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>1685</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>PARTY BUNTING</td>\n",
       "      <td>1594</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>1392</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>ASSORTED COLOUR BIRD ORNAMENT</td>\n",
       "      <td>1371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>SET OF 3 CAKE TINS PANTRY DESIGN</td>\n",
       "      <td>1241</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>NATURAL SLATE HEART CHALKBOARD</td>\n",
       "      <td>1219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL.</td>\n",
       "      <td>1216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>HEART OF WICKER SMALL</td>\n",
       "      <td>1164</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>JUMBO BAG PINK POLKADOT</td>\n",
       "      <td>1159</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>JUMBO SHOPPER VINTAGE RED PAISLEY</td>\n",
       "      <td>1133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>JUMBO STORAGE BAG SUKI</td>\n",
       "      <td>1130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>PACK OF 72 RETROSPOT CAKE CASES</td>\n",
       "      <td>1129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>PAPER CHAIN KIT 50'S CHRISTMAS</td>\n",
       "      <td>1125</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             item_name  item_count\n",
       "0   WHITE HANGING HEART T-LIGHT HOLDER        2166\n",
       "1              JUMBO BAG RED RETROSPOT        1938\n",
       "2             REGENCY CAKESTAND 3 TIER        1685\n",
       "3                        PARTY BUNTING        1594\n",
       "4              LUNCH BAG RED RETROSPOT        1392\n",
       "5        ASSORTED COLOUR BIRD ORNAMENT        1371\n",
       "6    SET OF 3 CAKE TINS PANTRY DESIGN         1241\n",
       "7      NATURAL SLATE HEART CHALKBOARD         1219\n",
       "8              LUNCH BAG  BLACK SKULL.        1216\n",
       "9                HEART OF WICKER SMALL        1164\n",
       "10             JUMBO BAG PINK POLKADOT        1159\n",
       "11   JUMBO SHOPPER VINTAGE RED PAISLEY        1133\n",
       "12              JUMBO STORAGE BAG SUKI        1130\n",
       "13     PACK OF 72 RETROSPOT CAKE CASES        1129\n",
       "14     PAPER CHAIN KIT 50'S CHRISTMAS         1125"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "item_counts_n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "items = list(cs_mba_uk.Description.unique())\n",
    "grouped = cs_mba_uk.groupby('InvoiceNo')\n",
    "transaction_level_df_uk = grouped.aggregate(lambda x: tuple(x)).reset_index()[['InvoiceNo','Description']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "transaction_dict = {item:0 for item in items}\n",
    "output_dict = dict()\n",
    "temp = dict()\n",
    "for rec in transaction_level_df_uk.to_dict('records'):\n",
    "    invoice_num = rec['InvoiceNo']\n",
    "    items_list = rec['Description']\n",
    "    transaction_dict = {item:0 for item in items}\n",
    "    transaction_dict.update({item:1 for item in items if item in items_list})\n",
    "    temp.update({invoice_num:transaction_dict})\n",
    "\n",
    "new = [v for k,v in temp.items()]\n",
    "tranasction_df = pd.DataFrame(new)\n",
    "del(tranasction_df[tranasction_df.columns[0]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(18786, 4058)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tranasction_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(8586, 43)\n"
     ]
    }
   ],
   "source": [
    "output_df_uk, item_counts = prune_dataset(input_df=tranasction_df, length_trans=2,total_sales_perc=0.1)\n",
    "print(output_df_uk.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(3711, 10)\n"
     ]
    }
   ],
   "source": [
    "output_df_uk_n, item_counts_n = prune_dataset(input_df=tranasction_df, length_trans = 2,start_item = 0, end_item = 10)\n",
    "print(output_df_uk_n.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>item_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>2166</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>1938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>1685</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>PARTY BUNTING</td>\n",
       "      <td>1594</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>1392</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>ASSORTED COLOUR BIRD ORNAMENT</td>\n",
       "      <td>1371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>SET OF 3 CAKE TINS PANTRY DESIGN</td>\n",
       "      <td>1241</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>NATURAL SLATE HEART CHALKBOARD</td>\n",
       "      <td>1219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL.</td>\n",
       "      <td>1216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>HEART OF WICKER SMALL</td>\n",
       "      <td>1164</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            item_name  item_count\n",
       "0  WHITE HANGING HEART T-LIGHT HOLDER        2166\n",
       "1             JUMBO BAG RED RETROSPOT        1938\n",
       "2            REGENCY CAKESTAND 3 TIER        1685\n",
       "3                       PARTY BUNTING        1594\n",
       "4             LUNCH BAG RED RETROSPOT        1392\n",
       "5       ASSORTED COLOUR BIRD ORNAMENT        1371\n",
       "6   SET OF 3 CAKE TINS PANTRY DESIGN         1241\n",
       "7     NATURAL SLATE HEART CHALKBOARD         1219\n",
       "8             LUNCH BAG  BLACK SKULL.        1216\n",
       "9               HEART OF WICKER SMALL        1164"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "item_counts_n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 623,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>WHITE HANGING HEART T-LIGHT HOLDER</th>\n",
       "      <th>JUMBO BAG RED RETROSPOT</th>\n",
       "      <th>REGENCY CAKESTAND 3 TIER</th>\n",
       "      <th>PARTY BUNTING</th>\n",
       "      <th>LUNCH BAG RED RETROSPOT</th>\n",
       "      <th>ASSORTED COLOUR BIRD ORNAMENT</th>\n",
       "      <th>SET OF 3 CAKE TINS PANTRY DESIGN</th>\n",
       "      <th>NATURAL SLATE HEART CHALKBOARD</th>\n",
       "      <th>LUNCH BAG  BLACK SKULL.</th>\n",
       "      <th>HEART OF WICKER SMALL</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    WHITE HANGING HEART T-LIGHT HOLDER  JUMBO BAG RED RETROSPOT  \\\n",
       "3                                    1                        0   \n",
       "5                                    0                        0   \n",
       "8                                    0                        0   \n",
       "16                                   0                        1   \n",
       "18                                   0                        0   \n",
       "\n",
       "    REGENCY CAKESTAND 3 TIER  PARTY BUNTING  LUNCH BAG RED RETROSPOT  \\\n",
       "3                          1              0                        1   \n",
       "5                          0              0                        0   \n",
       "8                          0              1                        0   \n",
       "16                         1              1                        0   \n",
       "18                         1              1                        0   \n",
       "\n",
       "    ASSORTED COLOUR BIRD ORNAMENT  SET OF 3 CAKE TINS PANTRY DESIGN   \\\n",
       "3                               0                                  1   \n",
       "5                               1                                  0   \n",
       "8                               1                                  1   \n",
       "16                              0                                  0   \n",
       "18                              0                                  0   \n",
       "\n",
       "    NATURAL SLATE HEART CHALKBOARD   LUNCH BAG  BLACK SKULL.  \\\n",
       "3                                 0                        0   \n",
       "5                                 0                        0   \n",
       "8                                 0                        0   \n",
       "16                                0                        0   \n",
       "18                                0                        0   \n",
       "\n",
       "    HEART OF WICKER SMALL  \n",
       "3                       0  \n",
       "5                       1  \n",
       "8                       0  \n",
       "16                      1  \n",
       "18                      0  "
      ]
     },
     "execution_count": 623,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "output_df_uk_n.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "input_ass_rules = output_df_uk_n\n",
    "\n",
    "domain_grocery = Domain([DiscreteVariable.make(name=item,values=['0', '1']) for item in input_ass_rules.columns])\n",
    "data_gro_1 = Orange.data.Table.from_numpy(domain=domain_grocery,  X=input_ass_rules.as_matrix(),Y= None)\n",
    "data_gro_1_en, mapping = OneHot.encode(data_gro_1, include_class=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "num of required transactions =  33\n"
     ]
    }
   ],
   "source": [
    "support = 0.009\n",
    "print(\"num of required transactions = \", int(input_ass_rules.shape[0]*support))\n",
    "num_trans = input_ass_rules.shape[0]*support\n",
    "itemsets = dict(frequent_itemsets(data_gro_1_en, support))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "19178"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(itemsets)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Raw rules data frame of 2607 rules generated\n"
     ]
    }
   ],
   "source": [
    "confidence = 0.4\n",
    "rules_df = pd.DataFrame()\n",
    "if len(itemsets) < 1000000: \n",
    "    rules = [(P, Q, supp, conf)\n",
    "    for P, Q, supp, conf in association_rules(itemsets, confidence)\n",
    "       if len(Q) == 1 ]\n",
    "\n",
    "    names = {item: '{}={}'.format(var.name, val)\n",
    "        for item, var, val in OneHot.decode(mapping, data_gro_1, mapping)}\n",
    "    \n",
    "    eligible_ante = [v for k,v in names.items() if v.endswith(\"1\")]\n",
    "    \n",
    "    N = input_ass_rules.shape[0]*0.5\n",
    "    \n",
    "    rule_stats = list(rules_stats(rules, itemsets, N))\n",
    "    \n",
    "    rule_list_df = []\n",
    "    for ex_rule_frm_rule_stat in rule_stats:\n",
    "        ante = ex_rule_frm_rule_stat[0]            \n",
    "        cons = ex_rule_frm_rule_stat[1]\n",
    "        named_cons = names[next(iter(cons))]\n",
    "        if named_cons in eligible_ante:\n",
    "            rule_lhs = [names[i][:-2] for i in ante if names[i] in eligible_ante]\n",
    "            ante_rule = ', '.join(rule_lhs)\n",
    "            if ante_rule and len(rule_lhs)>1 :\n",
    "                rule_dict = {'support' : ex_rule_frm_rule_stat[2],\n",
    "                     'confidence' : ex_rule_frm_rule_stat[3],\n",
    "                    'coverage' : ex_rule_frm_rule_stat[4],\n",
    "                     'strength' : ex_rule_frm_rule_stat[5],\n",
    "                     'lift' : ex_rule_frm_rule_stat[6],\n",
    "                    'leverage' : ex_rule_frm_rule_stat[7],\n",
    "                    'antecedent': ante_rule,\n",
    "                    'consequent':named_cons[:-2] }\n",
    "                rule_list_df.append(rule_dict)\n",
    "    rules_df = pd.DataFrame(rule_list_df)\n",
    "    print(\"Raw rules data frame of {} rules generated\".format(rules_df.shape[0]))\n",
    "    if not rules_df.empty:\n",
    "        pruned_rules_df = rules_df.groupby(['antecedent','consequent']).max().reset_index()\n",
    "    else:\n",
    "        print(\"Unable to generate any rule\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Raw rules data frame of 124239 rules generated\n"
     ]
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>antecedent</th>\n",
       "      <th>consequent</th>\n",
       "      <th>support</th>\n",
       "      <th>confidence</th>\n",
       "      <th>lift</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>109</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>227</td>\n",
       "      <td>0.659292</td>\n",
       "      <td>1.051863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>LUNCH BAG  BLACK SKULL.</td>\n",
       "      <td>227</td>\n",
       "      <td>0.450581</td>\n",
       "      <td>0.869983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT, NATURAL SLATE HEART C...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>162</td>\n",
       "      <td>0.514286</td>\n",
       "      <td>0.664062</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>68</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT, LUNCH BAG  BLACK SKULL.</td>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>156</td>\n",
       "      <td>0.658824</td>\n",
       "      <td>1.051115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT, LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>LUNCH BAG  BLACK SKULL.</td>\n",
       "      <td>156</td>\n",
       "      <td>0.449219</td>\n",
       "      <td>0.867352</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>HEART OF WICKER SMALL, NATURAL SLATE HEART CHA...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>152</td>\n",
       "      <td>0.522337</td>\n",
       "      <td>0.674458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>312</th>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER, HEART OF W...</td>\n",
       "      <td>NATURAL SLATE HEART CHALKBOARD</td>\n",
       "      <td>152</td>\n",
       "      <td>0.405333</td>\n",
       "      <td>0.832886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>262</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, WHITE HANGING HEART T...</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>149</td>\n",
       "      <td>0.459877</td>\n",
       "      <td>0.669256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>137</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., PARTY BUNTING</td>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>145</td>\n",
       "      <td>0.659091</td>\n",
       "      <td>1.051542</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>228</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, PARTY BUNTING</td>\n",
       "      <td>LUNCH BAG  BLACK SKULL.</td>\n",
       "      <td>145</td>\n",
       "      <td>0.627119</td>\n",
       "      <td>1.210841</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>162</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., WHITE HANGING HEART T...</td>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>142</td>\n",
       "      <td>0.549020</td>\n",
       "      <td>0.875929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>347</th>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER, LUNCH BAG ...</td>\n",
       "      <td>LUNCH BAG  BLACK SKULL.</td>\n",
       "      <td>142</td>\n",
       "      <td>0.475610</td>\n",
       "      <td>0.918308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>232</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>PARTY BUNTING</td>\n",
       "      <td>127</td>\n",
       "      <td>0.679612</td>\n",
       "      <td>1.152669</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>229</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, PARTY BUNTING</td>\n",
       "      <td>REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>127</td>\n",
       "      <td>0.537190</td>\n",
       "      <td>0.972445</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT, PARTY BUNTING</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>127</td>\n",
       "      <td>0.403175</td>\n",
       "      <td>0.520592</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>219</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, NATURAL SLATE HEART C...</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>126</td>\n",
       "      <td>0.586047</td>\n",
       "      <td>0.852870</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT, NATURAL SLATE HEART C...</td>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>126</td>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.638177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>231</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>LUNCH BAG  BLACK SKULL.</td>\n",
       "      <td>125</td>\n",
       "      <td>0.670000</td>\n",
       "      <td>1.293637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>125</td>\n",
       "      <td>0.603604</td>\n",
       "      <td>0.963015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT, SET OF 3 CAKE TINS PA...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>123</td>\n",
       "      <td>0.425606</td>\n",
       "      <td>0.549555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>305</th>\n",
       "      <td>SET OF 3 CAKE TINS PANTRY DESIGN , NATURAL SLA...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>122</td>\n",
       "      <td>0.523605</td>\n",
       "      <td>0.676096</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>PARTY BUNTING</td>\n",
       "      <td>112</td>\n",
       "      <td>0.650485</td>\n",
       "      <td>1.103268</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>138</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., PARTY BUNTING</td>\n",
       "      <td>REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>112</td>\n",
       "      <td>0.567797</td>\n",
       "      <td>1.027850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>295</th>\n",
       "      <td>REGENCY CAKESTAND 3 TIER, NATURAL SLATE HEART ...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>112</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.645616</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>275</th>\n",
       "      <td>NATURAL SLATE HEART CHALKBOARD , PARTY BUNTING</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>111</td>\n",
       "      <td>0.447581</td>\n",
       "      <td>0.577930</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>NATURAL SLATE HEART CHALKBOARD</td>\n",
       "      <td>110</td>\n",
       "      <td>0.434783</td>\n",
       "      <td>0.893399</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>304</th>\n",
       "      <td>SET OF 3 CAKE TINS PANTRY DESIGN , NATURAL SLA...</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>109</td>\n",
       "      <td>0.482234</td>\n",
       "      <td>0.701792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>274</th>\n",
       "      <td>NATURAL SLATE HEART CHALKBOARD , PARTY BUNTING</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>109</td>\n",
       "      <td>0.462687</td>\n",
       "      <td>0.673345</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>109</td>\n",
       "      <td>0.430830</td>\n",
       "      <td>0.556301</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT, REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>109</td>\n",
       "      <td>0.422481</td>\n",
       "      <td>0.545520</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>198</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSP...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>35</td>\n",
       "      <td>0.660377</td>\n",
       "      <td>0.852700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>218</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSP...</td>\n",
       "      <td>NATURAL SLATE HEART CHALKBOARD</td>\n",
       "      <td>35</td>\n",
       "      <td>0.625000</td>\n",
       "      <td>1.284261</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>225</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, NATURAL SLATE HEART C...</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>35</td>\n",
       "      <td>0.573770</td>\n",
       "      <td>0.835005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>HEART OF WICKER SMALL, REGENCY CAKESTAND 3 TIE...</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>35</td>\n",
       "      <td>0.555556</td>\n",
       "      <td>0.808497</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>HEART OF WICKER SMALL, REGENCY CAKESTAND 3 TIE...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>35</td>\n",
       "      <td>0.555556</td>\n",
       "      <td>0.717351</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>332</th>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER, JUMBO BAG ...</td>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>35</td>\n",
       "      <td>0.530303</td>\n",
       "      <td>0.846068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>326</th>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER, JUMBO BAG ...</td>\n",
       "      <td>NATURAL SLATE HEART CHALKBOARD</td>\n",
       "      <td>35</td>\n",
       "      <td>0.514706</td>\n",
       "      <td>1.057627</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>252</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, SET OF 3 CAKE TINS PA...</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>35</td>\n",
       "      <td>0.507246</td>\n",
       "      <td>0.738193</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>216</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSP...</td>\n",
       "      <td>PARTY BUNTING</td>\n",
       "      <td>35</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.848035</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>311</th>\n",
       "      <td>SET OF 3 CAKE TINS PANTRY DESIGN , REGENCY CAK...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>35</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.645616</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT...</td>\n",
       "      <td>PARTY BUNTING</td>\n",
       "      <td>35</td>\n",
       "      <td>0.437500</td>\n",
       "      <td>0.742030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT...</td>\n",
       "      <td>REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>35</td>\n",
       "      <td>0.432099</td>\n",
       "      <td>0.782204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>93</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT, SET OF 3 CAKE TINS PA...</td>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>35</td>\n",
       "      <td>0.432099</td>\n",
       "      <td>0.689389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84</th>\n",
       "      <td>JUMBO BAG RED RETROSPOT, REGENCY CAKESTAND 3 T...</td>\n",
       "      <td>HEART OF WICKER SMALL</td>\n",
       "      <td>35</td>\n",
       "      <td>0.421687</td>\n",
       "      <td>0.938177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>268</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, WHITE HANGING HEART T...</td>\n",
       "      <td>SET OF 3 CAKE TINS PANTRY DESIGN</td>\n",
       "      <td>35</td>\n",
       "      <td>0.416667</td>\n",
       "      <td>0.913859</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>HEART OF WICKER SMALL, WHITE HANGING HEART T-L...</td>\n",
       "      <td>NATURAL SLATE HEART CHALKBOARD</td>\n",
       "      <td>34</td>\n",
       "      <td>0.723404</td>\n",
       "      <td>1.486464</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>157</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., SET OF 3 CAKE TINS PA...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>34</td>\n",
       "      <td>0.680000</td>\n",
       "      <td>0.878038</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>318</th>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER, HEART OF W...</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>34</td>\n",
       "      <td>0.680000</td>\n",
       "      <td>0.989600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>34</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.844267</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>134</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., NATURAL SLATE HEART C...</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>34</td>\n",
       "      <td>0.576271</td>\n",
       "      <td>0.838644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., SET OF 3 CAKE TINS PA...</td>\n",
       "      <td>JUMBO BAG RED RETROSPOT</td>\n",
       "      <td>34</td>\n",
       "      <td>0.566667</td>\n",
       "      <td>0.824667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., SET OF 3 CAKE TINS PA...</td>\n",
       "      <td>REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>34</td>\n",
       "      <td>0.566667</td>\n",
       "      <td>1.025805</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>300</th>\n",
       "      <td>SET OF 3 CAKE TINS PANTRY DESIGN , HEART OF WI...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>34</td>\n",
       "      <td>0.566667</td>\n",
       "      <td>0.731698</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>122</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., JUMBO BAG RED RETROSP...</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>34</td>\n",
       "      <td>0.523077</td>\n",
       "      <td>0.675414</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>335</th>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER, JUMBO BAG ...</td>\n",
       "      <td>HEART OF WICKER SMALL</td>\n",
       "      <td>34</td>\n",
       "      <td>0.515152</td>\n",
       "      <td>1.146119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>HEART OF WICKER SMALL, WHITE HANGING HEART T-L...</td>\n",
       "      <td>PARTY BUNTING</td>\n",
       "      <td>34</td>\n",
       "      <td>0.485714</td>\n",
       "      <td>0.823805</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT...</td>\n",
       "      <td>SET OF 3 CAKE TINS PANTRY DESIGN</td>\n",
       "      <td>34</td>\n",
       "      <td>0.430380</td>\n",
       "      <td>0.943936</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>151</th>\n",
       "      <td>LUNCH BAG  BLACK SKULL., REGENCY CAKESTAND 3 T...</td>\n",
       "      <td>SET OF 3 CAKE TINS PANTRY DESIGN</td>\n",
       "      <td>34</td>\n",
       "      <td>0.419753</td>\n",
       "      <td>0.920629</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>325</th>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER, HEART OF W...</td>\n",
       "      <td>REGENCY CAKESTAND 3 TIER</td>\n",
       "      <td>34</td>\n",
       "      <td>0.404762</td>\n",
       "      <td>0.732718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSP...</td>\n",
       "      <td>LUNCH BAG  BLACK SKULL.</td>\n",
       "      <td>34</td>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.772320</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>368 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                            antecedent  \\\n",
       "109   LUNCH BAG  BLACK SKULL., JUMBO BAG RED RETROSPOT   \n",
       "192   LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSPOT   \n",
       "71   JUMBO BAG RED RETROSPOT, NATURAL SLATE HEART C...   \n",
       "68    JUMBO BAG RED RETROSPOT, LUNCH BAG  BLACK SKULL.   \n",
       "69    JUMBO BAG RED RETROSPOT, LUNCH BAG RED RETROSPOT   \n",
       "34   HEART OF WICKER SMALL, NATURAL SLATE HEART CHA...   \n",
       "312  WHITE HANGING HEART T-LIGHT HOLDER, HEART OF W...   \n",
       "262  LUNCH BAG RED RETROSPOT, WHITE HANGING HEART T...   \n",
       "137             LUNCH BAG  BLACK SKULL., PARTY BUNTING   \n",
       "228             LUNCH BAG RED RETROSPOT, PARTY BUNTING   \n",
       "162  LUNCH BAG  BLACK SKULL., WHITE HANGING HEART T...   \n",
       "347  WHITE HANGING HEART T-LIGHT HOLDER, LUNCH BAG ...   \n",
       "232  LUNCH BAG RED RETROSPOT, REGENCY CAKESTAND 3 TIER   \n",
       "229             LUNCH BAG RED RETROSPOT, PARTY BUNTING   \n",
       "74              JUMBO BAG RED RETROSPOT, PARTY BUNTING   \n",
       "219  LUNCH BAG RED RETROSPOT, NATURAL SLATE HEART C...   \n",
       "70   JUMBO BAG RED RETROSPOT, NATURAL SLATE HEART C...   \n",
       "231  LUNCH BAG RED RETROSPOT, REGENCY CAKESTAND 3 TIER   \n",
       "140  LUNCH BAG  BLACK SKULL., REGENCY CAKESTAND 3 TIER   \n",
       "88   JUMBO BAG RED RETROSPOT, SET OF 3 CAKE TINS PA...   \n",
       "305  SET OF 3 CAKE TINS PANTRY DESIGN , NATURAL SLA...   \n",
       "141  LUNCH BAG  BLACK SKULL., REGENCY CAKESTAND 3 TIER   \n",
       "138             LUNCH BAG  BLACK SKULL., PARTY BUNTING   \n",
       "295  REGENCY CAKESTAND 3 TIER, NATURAL SLATE HEART ...   \n",
       "275     NATURAL SLATE HEART CHALKBOARD , PARTY BUNTING   \n",
       "2       HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT   \n",
       "304  SET OF 3 CAKE TINS PANTRY DESIGN , NATURAL SLA...   \n",
       "274     NATURAL SLATE HEART CHALKBOARD , PARTY BUNTING   \n",
       "3       HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT   \n",
       "77   JUMBO BAG RED RETROSPOT, REGENCY CAKESTAND 3 TIER   \n",
       "..                                                 ...   \n",
       "198  LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSP...   \n",
       "218  LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSP...   \n",
       "225  LUNCH BAG RED RETROSPOT, NATURAL SLATE HEART C...   \n",
       "48   HEART OF WICKER SMALL, REGENCY CAKESTAND 3 TIE...   \n",
       "50   HEART OF WICKER SMALL, REGENCY CAKESTAND 3 TIE...   \n",
       "332  WHITE HANGING HEART T-LIGHT HOLDER, JUMBO BAG ...   \n",
       "326  WHITE HANGING HEART T-LIGHT HOLDER, JUMBO BAG ...   \n",
       "252  LUNCH BAG RED RETROSPOT, SET OF 3 CAKE TINS PA...   \n",
       "216  LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSP...   \n",
       "311  SET OF 3 CAKE TINS PANTRY DESIGN , REGENCY CAK...   \n",
       "16   HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT...   \n",
       "11   HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT...   \n",
       "93   JUMBO BAG RED RETROSPOT, SET OF 3 CAKE TINS PA...   \n",
       "84   JUMBO BAG RED RETROSPOT, REGENCY CAKESTAND 3 T...   \n",
       "268  LUNCH BAG RED RETROSPOT, WHITE HANGING HEART T...   \n",
       "65   HEART OF WICKER SMALL, WHITE HANGING HEART T-L...   \n",
       "157  LUNCH BAG  BLACK SKULL., SET OF 3 CAKE TINS PA...   \n",
       "318  WHITE HANGING HEART T-LIGHT HOLDER, HEART OF W...   \n",
       "13   HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT...   \n",
       "134  LUNCH BAG  BLACK SKULL., NATURAL SLATE HEART C...   \n",
       "158  LUNCH BAG  BLACK SKULL., SET OF 3 CAKE TINS PA...   \n",
       "160  LUNCH BAG  BLACK SKULL., SET OF 3 CAKE TINS PA...   \n",
       "300  SET OF 3 CAKE TINS PANTRY DESIGN , HEART OF WI...   \n",
       "122  LUNCH BAG  BLACK SKULL., JUMBO BAG RED RETROSP...   \n",
       "335  WHITE HANGING HEART T-LIGHT HOLDER, JUMBO BAG ...   \n",
       "63   HEART OF WICKER SMALL, WHITE HANGING HEART T-L...   \n",
       "23   HEART OF WICKER SMALL, JUMBO BAG RED RETROSPOT...   \n",
       "151  LUNCH BAG  BLACK SKULL., REGENCY CAKESTAND 3 T...   \n",
       "325  WHITE HANGING HEART T-LIGHT HOLDER, HEART OF W...   \n",
       "199  LUNCH BAG RED RETROSPOT, JUMBO BAG RED RETROSP...   \n",
       "\n",
       "                             consequent  support  confidence      lift  \n",
       "109             LUNCH BAG RED RETROSPOT      227    0.659292  1.051863  \n",
       "192             LUNCH BAG  BLACK SKULL.      227    0.450581  0.869983  \n",
       "71   WHITE HANGING HEART T-LIGHT HOLDER      162    0.514286  0.664062  \n",
       "68              LUNCH BAG RED RETROSPOT      156    0.658824  1.051115  \n",
       "69              LUNCH BAG  BLACK SKULL.      156    0.449219  0.867352  \n",
       "34   WHITE HANGING HEART T-LIGHT HOLDER      152    0.522337  0.674458  \n",
       "312     NATURAL SLATE HEART CHALKBOARD       152    0.405333  0.832886  \n",
       "262             JUMBO BAG RED RETROSPOT      149    0.459877  0.669256  \n",
       "137             LUNCH BAG RED RETROSPOT      145    0.659091  1.051542  \n",
       "228             LUNCH BAG  BLACK SKULL.      145    0.627119  1.210841  \n",
       "162             LUNCH BAG RED RETROSPOT      142    0.549020  0.875929  \n",
       "347             LUNCH BAG  BLACK SKULL.      142    0.475610  0.918308  \n",
       "232                       PARTY BUNTING      127    0.679612  1.152669  \n",
       "229            REGENCY CAKESTAND 3 TIER      127    0.537190  0.972445  \n",
       "74   WHITE HANGING HEART T-LIGHT HOLDER      127    0.403175  0.520592  \n",
       "219             JUMBO BAG RED RETROSPOT      126    0.586047  0.852870  \n",
       "70              LUNCH BAG RED RETROSPOT      126    0.400000  0.638177  \n",
       "231             LUNCH BAG  BLACK SKULL.      125    0.670000  1.293637  \n",
       "140             LUNCH BAG RED RETROSPOT      125    0.603604  0.963015  \n",
       "88   WHITE HANGING HEART T-LIGHT HOLDER      123    0.425606  0.549555  \n",
       "305  WHITE HANGING HEART T-LIGHT HOLDER      122    0.523605  0.676096  \n",
       "141                       PARTY BUNTING      112    0.650485  1.103268  \n",
       "138            REGENCY CAKESTAND 3 TIER      112    0.567797  1.027850  \n",
       "295  WHITE HANGING HEART T-LIGHT HOLDER      112    0.500000  0.645616  \n",
       "275  WHITE HANGING HEART T-LIGHT HOLDER      111    0.447581  0.577930  \n",
       "2       NATURAL SLATE HEART CHALKBOARD       110    0.434783  0.893399  \n",
       "304             JUMBO BAG RED RETROSPOT      109    0.482234  0.701792  \n",
       "274             JUMBO BAG RED RETROSPOT      109    0.462687  0.673345  \n",
       "3    WHITE HANGING HEART T-LIGHT HOLDER      109    0.430830  0.556301  \n",
       "77   WHITE HANGING HEART T-LIGHT HOLDER      109    0.422481  0.545520  \n",
       "..                                  ...      ...         ...       ...  \n",
       "198  WHITE HANGING HEART T-LIGHT HOLDER       35    0.660377  0.852700  \n",
       "218     NATURAL SLATE HEART CHALKBOARD        35    0.625000  1.284261  \n",
       "225             JUMBO BAG RED RETROSPOT       35    0.573770  0.835005  \n",
       "48              JUMBO BAG RED RETROSPOT       35    0.555556  0.808497  \n",
       "50   WHITE HANGING HEART T-LIGHT HOLDER       35    0.555556  0.717351  \n",
       "332             LUNCH BAG RED RETROSPOT       35    0.530303  0.846068  \n",
       "326     NATURAL SLATE HEART CHALKBOARD        35    0.514706  1.057627  \n",
       "252             JUMBO BAG RED RETROSPOT       35    0.507246  0.738193  \n",
       "216                       PARTY BUNTING       35    0.500000  0.848035  \n",
       "311  WHITE HANGING HEART T-LIGHT HOLDER       35    0.500000  0.645616  \n",
       "16                        PARTY BUNTING       35    0.437500  0.742030  \n",
       "11             REGENCY CAKESTAND 3 TIER       35    0.432099  0.782204  \n",
       "93              LUNCH BAG RED RETROSPOT       35    0.432099  0.689389  \n",
       "84                HEART OF WICKER SMALL       35    0.421687  0.938177  \n",
       "268   SET OF 3 CAKE TINS PANTRY DESIGN        35    0.416667  0.913859  \n",
       "65      NATURAL SLATE HEART CHALKBOARD        34    0.723404  1.486464  \n",
       "157  WHITE HANGING HEART T-LIGHT HOLDER       34    0.680000  0.878038  \n",
       "318             JUMBO BAG RED RETROSPOT       34    0.680000  0.989600  \n",
       "13   WHITE HANGING HEART T-LIGHT HOLDER       34    0.653846  0.844267  \n",
       "134             JUMBO BAG RED RETROSPOT       34    0.576271  0.838644  \n",
       "158             JUMBO BAG RED RETROSPOT       34    0.566667  0.824667  \n",
       "160            REGENCY CAKESTAND 3 TIER       34    0.566667  1.025805  \n",
       "300  WHITE HANGING HEART T-LIGHT HOLDER       34    0.566667  0.731698  \n",
       "122  WHITE HANGING HEART T-LIGHT HOLDER       34    0.523077  0.675414  \n",
       "335               HEART OF WICKER SMALL       34    0.515152  1.146119  \n",
       "63                        PARTY BUNTING       34    0.485714  0.823805  \n",
       "23    SET OF 3 CAKE TINS PANTRY DESIGN        34    0.430380  0.943936  \n",
       "151   SET OF 3 CAKE TINS PANTRY DESIGN        34    0.419753  0.920629  \n",
       "325            REGENCY CAKESTAND 3 TIER       34    0.404762  0.732718  \n",
       "199             LUNCH BAG  BLACK SKULL.       34    0.400000  0.772320  \n",
       "\n",
       "[368 rows x 5 columns]"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pruned_rules_df[['antecedent','consequent','support','confidence','lift']].sort_values(['support','confidence'], ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "pruned_rules_df.to_csv(path_or_buf='pruned_rule_uk_top10_item.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
